/**
 * <p>
 * web访问的操作流程：
 * 1. 所有的访问通过{@link DelegatingFilterProxy}进入
 *     {@link DelegatingFilterProxy}对象的主要任务是调用spring容器里被托管的{@link FilterChainProxy}对象
 *     {@link DelegatingFilterProxy}需要被配置在web.xml文件里，并指定处理那些路径请求，如："/*"处理所有请求
 *     web.xml里的配置的对象无法直接调用spring容器里的对象，所以需要使用这个代理
 * 
 * 2. 然后交给{@link FilterChainProxy}对象，进行代理处理
 *     {@link FilterChainProxy}对象存放的是{@link SecurityFilterChain}对象，
 *     该对象主要是通过"http"配置节点进行定义的；{@link SecurityFilterChain}对象是被spring容器托管起来的
 *     默认情况下使用{@link DefaultSecurityFilterChain}对象
 *     
 * 3. 在{@link FilterChainProxy}对象里查找符合条件的{@link SecurityFilterChain}对象
 *     <code>
 *         FilterChainProxy.doFilterInternal(ServletRequest, ServletResponse, FilterChain)
 *         SecurityFilterChain.matches(HttpServletRequest)找到对应处理的{@link SecurityFilterChain}对象
 *     </code>
 *     
 * 4. 如果找到对应的{@link SecurityFilterChain}对象，那么就调用该对象下的处理方法：
 *     <code>
 *         SecurityFilterChain.getFilters(); 
 *         如：定义"/s/**"访问某一个{@link SecurityFilterChain}定义
 *     </code>
 *     
 * 5. 最后调用对应处理控制器
 * </p>
 * 
 * <p>
 * 过程器执行完毕后，就开始调用该路径对应的控制器。
 * 由于j2ee标准，每访问一个页面调用的是对应的servlet，所以对于控制器的访问，其实也就是都交给了一个指定的servlet进行处理
 * 默认下使用{@link DispatcherServlet}，并且需要配置那些路径交给这个servlet进行处理，默认配置为："/"，即所有的访问
 * 
 * 1. 在web.xml配置文件里配置servlet节点为{@link DispatcherServlet}对象
 *     这个对象不被spring容器托管，但在{@link DispatcherServlet}对象，需要访问spring托管的控制器
 * 
 * 2. 一个访问请求，在过滤器处理完毕后，就调用对应的servlet对象({@link DispatcherServlet})进行处理，这一步还是j2ee的标准
 * 
 * 3. 
 * 
 * </p>
 * 
 * @see org.springframework.web.filter.DelegatingFilterProxy
 * @see org.springframework.security.web.FilterChainProxy
 * @see org.springframework.security.web.SecurityFilterChain
 * @see org.springframework.security.web.DefaultSecurityFilterChain
 * 
 * @see org.springframework.web.servlet.DispatcherServlet
 */
package org.batatasframework.web;